package com.zaimokuza.cn.service;

import com.zaimokuza.cn.entity.PageResult;
import com.zaimokuza.cn.entity.blog.Blog;

import java.util.ArrayList;

/**
 * @author zaimokuza
 */
public interface BlogService {

    /**
     * 添加博客
     *
     * @param blog 博客信息
     */
    void addBlog(Blog blog);

    /**
     * 更新博客
     *
     * @param blog   博客信息
     * @param userId 更新者ID
     */
    void updateBlog(Blog blog, String userId);

    /**
     * 用户根据ID删除博客
     *
     * @param blogId 博客ID
     * @param userId 操作者ID
     */
    void deleteBlogForUser(String blogId, String userId);

    /**
     * 根据ID删除博客
     *
     * @param id 博客ID
     */
    void deleteBlog(String id);

    /**
     * 根据作者域名查询分页的博客列表
     *
     * @param param 查询条件
     * @param page  当前页
     * @param size  每页数量
     * @return 分页的博客列表
     */
    PageResult<Blog> getBlogPage(Blog param, Integer page, Integer size);

    /**
     * 根据博客ID查询博客详情
     *
     * @param blogId 博客ID
     * @param userId 查询用户ID
     * @return 博客信息
     */
    Blog getBlogDetail(String blogId, String userId);

    /**
     * 根据博客ID查询用于编辑的博客信息
     *
     * @param blogId 博客ID
     * @param userId 查询用户ID
     * @return 博客信息
     */
    Blog getBlogDetailForUpdate(String blogId, String userId);

    /**
     * 根据时间查询推荐博客
     *
     * @param time 时间
     * @return 博客列表
     */
    ArrayList<Blog> getRecommendBlogList(String time);

    /**
     * 根据时间及搜索内容查询博客
     *
     * @param str  搜索内容
     * @param time 时间
     * @return 博客列表
     */
    ArrayList<Blog> getSearchBlogList(String str, String time);

    /* 统计相关操作 */

    /**
     * 增加博客点赞数
     *
     * @param blogId 博客ID
     */
    void increaseBlogLikes(String blogId);

    /**
     * 减少博客点赞数
     *
     * @param blogId 博客ID
     */
    void reduceBlogLikes(String blogId);

    /**
     * 增加博客阅读数
     *
     * @param blogId 博客ID
     */
    void increaseBlogPageViews(String blogId);

}
